import L_String from "../utils/L_String";

export type CEnhRs={
    itemTypeIdStr:string,
    playerEnhIndex:number
}


/** 玩家物品强化序号管理 （只管理序号）*/
export default class PlayerItemXEnh{
    playerId:number
    enhMaxIndex:number
    /**玩家强化物品类型ID  ID字符串前缀 例如'AE02'.substring(0,2) */
    sufixKeyOfPlayerIndex:string
    /**当前玩家可操作的强化索引号 如果是-1则表示不存在  取值范围1~enhMaxIndex */
    private _curCtrlEnhIndex?: number
    /**已使用 */
    private _enhItemIndexSet: Set<number>
    /**已强化装备的管理集合 */
    //_enhItemSet?: Set<ItemX>
    private usedIndexNum=0
 
 
 
  constructor(playerId:number,enhMaxIndex:number,sufixKeyOfPlayerIndex:string){
    this.playerId=playerId
    this.enhMaxIndex=enhMaxIndex
    this.sufixKeyOfPlayerIndex=sufixKeyOfPlayerIndex
    this._enhItemIndexSet=new Set()
  }

  public getCurEnhItemTypeId():CEnhRs | null{
    //快速失败
    if(this.usedIndexNum>=this.enhMaxIndex) return null;
    let rsIndex:number | undefined=this._curCtrlEnhIndex;
    //初次使用 重置到第一个索引位置
    if(rsIndex==undefined){   
      rsIndex=1;
    }else{
      //防止上次循环在末尾
      if(rsIndex>this.enhMaxIndex){
            rsIndex=1;
        }
      let loopMax=this.enhMaxIndex+1;  //最大循环检查次数 
      while(this._enhItemIndexSet?.has(rsIndex) && loopMax>=0){
        rsIndex++;
        if(rsIndex>this.enhMaxIndex){
            rsIndex=1;
        }
        loopMax--;
      }
      if(loopMax<0) return null  // 循环一圈都没有找到合适的 直接抛出无法查找结果
    }
    //找到了 标记一下位置
     this._enhItemIndexSet.add(rsIndex);
     //console.log("--PXE的管理set:",L_String.getObjJSONStr(this._enhItemIndexSet))

     this.usedIndexNum++;
     this._curCtrlEnhIndex=rsIndex+1 //指向下一个 方便下次使用
    //  if(this._enhItemSet==undefined) this._enhItemSet=new Set();
    //  this._enhItemSet
    return {
        itemTypeIdStr:this.sufixKeyOfPlayerIndex+L_String.getNumberStrWith2Len(rsIndex),
        playerEnhIndex:rsIndex
    }
  }

  public destroyEnhItemx(itemEthIndex:number){
    //console.log("--PXE摧毁前检测:",(typeof this._enhItemIndexSet),",",L_String.getObjJSONStr(this._enhItemIndexSet))
    console.log("--PXE摧毁ENH强化物品",itemEthIndex)
    this._enhItemIndexSet?.delete(itemEthIndex)
    this.usedIndexNum--;
  }
  




}  